package it.scambiocorse.start.validator;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;

import org.apache.log4j.Logger;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

import it.scambiocorse.dao.CodaService;
import it.scambiocorse.dao.ServizioService;
import it.scambiocorse.dao.UtenteService;
import it.scambiocorse.model.IdentificativoType;
import it.scambiocorse.model.ServizioType;
import it.scambiocorse.model.UtenteType;
import it.scambiocorse.utils.Costanti;
import it.scambiocorse.utils.ResourceManager;
import it.scambiocorse.utils.Utils;

public class NewUserValidator implements Validator  {

	final Logger logger = Logger.getLogger(getClass());
	 
	public boolean supports(Class aClass) {
		return UtenteType.class.equals(aClass);
	}
 
	public void validate(Object obj, Errors errors) {
			try {
					UtenteType uten = (UtenteType) obj;
					String msg = "Campo Obbligatorio";
					
					ValidationUtils.rejectIfEmptyOrWhitespace(errors, "login", "", msg);
					ValidationUtils.rejectIfEmptyOrWhitespace(errors, "nome", "", msg);
					ValidationUtils.rejectIfEmptyOrWhitespace(errors, "cognome", "", msg);
					ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "", msg);
					ValidationUtils.rejectIfEmptyOrWhitespace(errors, "comuNasc", "", msg);
					ValidationUtils.rejectIfEmptyOrWhitespace(errors, "provNasc", "", msg);
					ValidationUtils.rejectIfEmptyOrWhitespace(errors, "codiFisc", "", msg);
					if (Utils.isValidDate(uten.getDataNasc())) {
						errors.rejectValue("dataNasc", "", "Inserire una data nel formato gg/mm/aaaa");
					}
					
					UtenteService utenteDao = (UtenteService)ResourceManager.getBean("utenteService");
					
						if (!errors.hasFieldErrors("email") && utenteDao.getIdUserDaEmail(uten.getEmail()) > 0) {
							errors.rejectValue("email", "", "L'email da lei inserita risulta gia' registrata ad un'altro utente");
						}
					
						if (!errors.hasFieldErrors("login") && utenteDao.getIdUserDaLogin(uten.getLogin()) > 0 ) {
							errors.rejectValue("login", "", "Login gia' esistente, perfavore selezionane un'altra");
						}
					
						if (!errors.hasFieldErrors("codiFisc") && utenteDao.getIdUserDaCodiFisc(uten.getCodiFisc()) > 0 ) {
							errors.rejectValue("codiFisc", "", "Codice Fiscale gia' registrato");
						} else {
							if (uten.getCodiFisc().length() != 16) {
								errors.rejectValue("codiFisc", "", "Il codice fiscale deve essere composto almento da 16 caratteri!");
							}
						}
					
					logger.warn("Fine controlli utente");
	
			} catch (Exception e) {
				logger.error("SI SONO VERIFICATI DEI PROBLEMI DURANTE LA VALIDAZIONE");
		}
	}
}